/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Paciente;


/**
 *
 * @author Soares
 */
public class PacienteDAO {

    private Connection con;
    private PreparedStatement pstm;
    private ResultSet rs;

    public static final int ORDEM_POR_ID = 0;
    public static final int ORDEM_POR_NOME = 1;

    public PacienteDAO() throws SQLException {
        //Registra o conector com o banco de dados através do DriverManager.
        DriverManager.registerDriver(new org.postgresql.Driver());
        //Aqui criamos uma conexão para o envio de instruções SQL para o PostgreSQL.
        con = DriverManager.getConnection("jdbc:postgresql://localhost:5433/odontologico",
                "postgres",
                "llucas");
    }

    //O método salvar envia uma instrução INSERT para o banco de dados PostgreSQL.    
    public void confirmar(Paciente paciente) throws SQLException {
        //O caracter ? indica um parâmetro (valor) que será passado para a instrução.
        pstm = con.prepareStatement(
                "insert into paciente(nome, endereco, telefone, rg, cpf, email, senha, \"confirmar senha\") values (?, ?, ?, ?, ?, ?, ?, ?)");
        //Aqui passamos os valores de cada um dos parâmetros, na ordem que estão na instrução
        //SQL, da esquerda para direita.
        pstm.setString(1, paciente.getNome());
        pstm.setString(2, paciente.getEndereco());
        pstm.setString(3, paciente.getTelefone());
        pstm.setString(4, paciente.getRg());
        pstm.setString(5, paciente.getCpf());
        pstm.setString(6, paciente.getEmail());
        pstm.setString(7, paciente.getSenha());
        pstm.setString(8, paciente.getConfirmar_senha());
        pstm.execute();    //Após informar todos os parâmetros, mandamos executar a instrução.        
    }

    //O método alterar envia uma instrução UPDATE para o banco de dados PostgreSQL.
    public void alterar(Paciente paciente) throws SQLException {
        pstm = con.prepareStatement(
                "update paciente set nome = ?, endereco = ?, telefone = ?, rg = ?, cpf = ?,  email = ?, senha = ?, \"confirmar senha\" where id = ?");
        pstm.setString(1, paciente.getNome());
        pstm.setString(3, paciente.getEndereco());
        pstm.setString(4, paciente.getTelefone());
        pstm.setString(5, paciente.getRg());
        pstm.setString(6, paciente.getCpf());
        pstm.setString(2, paciente.getEmail());
        pstm.setString(2, paciente.getSenha());
        pstm.setString(2, paciente.getConfirmar_senha());
        pstm.setInt(7, paciente.getId());   //Altera de acordo com o ID informado pelo usuário.
        pstm.execute();
    }

    //O método excluir envia uma instrução DELETE para o banco de dados PostgreSQL.
    public void cancelar(Paciente paciente) throws SQLException {
        //Deleta o registro da tabela cujo ID é informado no parâmetro da instrução.
        pstm = con.prepareStatement(
                "delete from paciente where id = ?");
        pstm.setInt(1, paciente.getId());  //Exclui de acordo com o ID informado pelo usuário.
        pstm.execute();
    }

     public List<Paciente> getTodosPaciente(int ordem) throws SQLException{
        ArrayList<Paciente> lista = new ArrayList();  //Cria uma lista de mÃºsicas vazia.
        Paciente paciente = null;  //Define um objeto do tipo Mp3 tambÃ©m vazio.
        
        switch(ordem){
            case ORDEM_POR_ID:
                pstm = con.prepareStatement("select * from paciente order by id");
                break;
            case ORDEM_POR_NOME:
                pstm = con.prepareStatement("select * from paciente order by nome");
        }
        
        rs = pstm.executeQuery();  
        while(rs.next()){          
            paciente = new Paciente();
            paciente.setId(rs.getInt("id"));
            paciente.setNome(rs.getString("nome"));
            
            lista.add(paciente);
     }
        
        return lista;
     }
}
